数据监控
功能概述
Metrics数据监控平台提供一站式的数据可视化监控服务,实现数据的自动化采集及展示,帮助用户轻松了解底层平台运行情况,及时识别并处理异常。
数据监控平台由数据生成层Hyperchain、数据监控层Prometheus以及数据展示层Grafana三部组成。Hyperchain负责生成需要监控的数据并推送到Prometheus服务器中;Prometheus负责存储Hyperchian推送出来的数据,并对外提供读取接口;Grafana:负责从Prometheus服务器中读取数据,并在web上进行展示。
平台现已支持100+业务及系统层面的监控指标,指标开关灵活可配,具体可参考附录中的数据监控指标清单。
安装及初始化
为了能够完整的使用并展示数据监控的数据,除了需要应用层(即趣链区块链平台)适配并暴露一些监控数据之外,还需要下载并使用额外的两个组件:Prometheus(用于记录监控数据)以及Grafana(用于展示监控数据)。
安装Prometheus
Prometheus
Prometheus是一种时序数据库(TSDB, time-series database),用于记录平台推送出去的监控数据。
详细介绍请参考:https://prometheus.io/docs/introduction/overview/
安装下载请参考:https://prometheus.io/download/(建议安装最新版本)
Prometheus安装完成之后,需要配置好需要监听的区块链节点的地址与端口号,其配置文件默认为: prometheus.yml
node_exporter
如果用户希望监控系统资源的使用情况(例如CPU、磁盘、网络等),我们推荐使用Prometheus官方的工具node_exporter进行监控。
安装Grafana
Grafana是我们推荐使用的数据监控展示工具。
相关配置
数据监控功能是可选的,即可以通过节点开关配置来决定节点是否启用数据监控,相关配置位于configuration/debug.toml中。
平台默认不开启数据监控功能, 如果您想启用该功能,请将下述配置复制到debug.toml中,并做好相应配置。
metrics.enable:是否开启监控服务(true, false);metrics.enable_expensive:是否开启资源消耗较大的监控服务,实际不建议开启,需谨慎选择;metrics.port:监控服务端口。
[metrics]
enable = true
enable_expensive = false
# visit "http://127.0.0.1:'port'" to get metrics data
port = 9001
参考教程
搭建简单的Linux服务监控:参考教程
数据指标
指标说明
数据指标按用途不同分为外部指标和内部指标;按对平台性能影响程度又分为normal级别与expensive级别。其中,normal级别的指标不影响平台的运行, expensive级别的指标打开后会降低平台整体的性能,因此需要用户谨慎选择开启。
有关于系统资源的使用情况,建议使用Prometheus官方推荐的node_exporter工具进行监控。
系统相关指标
所有指标以”flato_namespace”(“flato”为趣链区块链平台新版英文简称)为前缀,例如在global这namespace下所有下述指标都要加上前缀”flato_global”(“flato”为趣链区块链平台新版英文简称)。
名称 |
类型 |
级别 |
描述 |
备注 |
|---|---|---|---|---|
execMgr_commit_txs |
counter |
normal |
此次启动后新增的交易数量 |
可以通过rate/irate命令计算出交易TPS |
execMgr_total_blocks |
gauge |
normal |
当前链高度 |
可以通过rate/irate命令计算出区块BPS |
rbft_batch_to_commit_duration |
histogram |
normal |
共识区块处理时间(rbft从打包到提交的时间) |
由于主从节点间有时差,因此以主节点的数据为主 |
execMgr_validate_tx_time |
histogram |
expensive |
单笔交易执行时间 |
交易级别的平均处理时间 |
execMgr_commit_time |
histogram |
normal |
写入区块处理时间(写块时间,包括区块组成、写入等等) |
区块级别的平均写入时间 |
共识相关指标
所有指标以”flato_namespace”(“flato”为趣链区块链平台新版英文简称)为前缀,例如在global这个Namespace下所有下述指标都要加上前缀”flato_global”(“flato”为趣链区块链平台新版英文简称)。
RBFT
名称 |
类型 |
级别 |
描述 |
备注 |
|---|---|---|---|---|
rbft_ID |
gauge |
normal |
rbft节点ID |
|
rbft_version |
gauge |
normal |
rbft共识协议版本号 |
|
rbft_epoch |
gauge |
normal |
rbft当前共识所处的epoch |
|
rbft_view |
gauge |
normal |
rbft当前共识所处的view |
|
rbft_cluster_size |
gauge |
normal |
rbft当前共识节点的个数 |
|
rbft_quorum_size |
gauge |
normal |
rbft当前quorum大小 |
|
rbft_status_normal |
gauge |
normal |
rbft是否处于normal状态on:1;off:0 |
|
rbft_status_conf_change |
gauge |
normal |
rbft是否处于配置区块状态on:2;off:0 |
|
rbft_status_viewchange |
gauge |
normal |
rbft是否处于vc状态on:3;off:0 |
|
rbft_status_recovery |
gauge |
normal |
rbft是否处于recovery状态on:4;off:0 |
|
rbft_status_state_update |
gauge |
normal |
rbft是否处于state update状态on:5;off:0 |
|
rbft_status_pool_full |
gauge |
normal |
rbft是否处于pool full状态on:6;off:0 |
|
rbft_status_pending |
gauge |
normal |
rbft是否处于pending状态on:7;off:0 |
|
rbft_committed_block_number |
counter |
normal |
rbft提交的区块数 |
|
rbft_committed_config_block_number |
counter |
normal |
rbft提交的配置区块数 |
|
rbft_committed_empty_block_number |
counter |
normal |
rbft提交的空块数(由vc导致的) |
|
rbft_committed_txs |
counter |
normal |
rbft提交的交易个数 |
|
rbft_txs_per_block |
histogram |
normal |
rbft提交的每个区块的交易个数 |
|
rbft_batch_persist_duration |
histogram |
normal |
rbft从打包到提交的时间 |
|
rbft_batche_number |
gauge |
normal |
rbft当前缓存的batch个数 |
|
rbft_outstanding_batche_number |
gauge |
normal |
rbft当前正在共识的batch个数,无负载时=0 |
|
rbft_state_update_times |
counter |
normal |
rbft触发的StateUpdate的次数 |
|
rbft_cache_batch_number |
gauge |
normal |
rbft当前缓存的已打包但是不能共识的batch个数,仅主节点有该值无负载时=0 |
|
rbft_fetch_missing_txs_times |
counter |
normal |
rbft向主节点索取缺失交易的次数 |
|
rbft_fetch_request_batch_times |
counter |
normal |
rbft向其他节点索取batch的次数 |
|
txset_incoming_txs |
counter |
normal |
txset模块接收到的来自API的交易(这里包括了NVP转发过来的) |
|
txset_pending_txs |
counter |
normal |
txset模块等待共识的交易个数 |
|
rbft_incoming_local_tx_sets |
counter |
normal |
rbft接收到的本地生成的txSet的个数 |
|
rbft_incoming_remote_tx_sets |
counter |
normal |
rbft接收到的其他VP节点转发过来的txSet的个数 |
|
rbft_incoming_local_txs |
counter |
normal |
rbft接收到的来自API的交易(这里包括了NVP转发过来的) |
|
rbft_incoming_remote_txs |
counter |
normal |
rbft接收到的其他VP节点转发过来的交易 |
|
rbft_rejected_local_txs |
counter |
normal |
rbft拒收的来自API的交易 |
|
rbft_rejected_remote_txs |
counter |
normal |
rbft拒收的其他VP节点转发过来的交易 |
注意:
由于交易进入consensus模块之后需要经由txSet模块打包成一个set才能进入rbft模块,因此有txset_incoming_txs >= rbft_incoming_local_txs
txpool
名称 |
类型 |
级别 |
描述 |
备注 |
|---|---|---|---|---|
txpool_incoming_txs |
counter |
normal |
txpool接收到的交易总数 |
|
txpool_duplicate_txs |
counter |
normal |
txpool中检测到的重复交易 |
|
txpool_nonBatched_txs |
gauge |
normal |
当前交易池中未打包的交易个数,无负载时=0 |
|
txpool_batched_txs |
gauge |
normal |
当前交易池中已打包的交易个数 |
|
txpool_batches |
gauge |
normal |
当前交易池中的batch个数,无负载时<20(共识缓存最多20个batch)有负载时从节点<50,主节点理论上无上限 |
注意:
txpool接收的交易是经由rbft模块传递下来的,因此有
txpool_incoming_txs = rbft_incoming_local_txs + rbft_incoming_remote_txs - rbft_reject_txs
存储相关指标
名称 |
类型 |
级别 |
描述 |
备注 |
|---|---|---|---|---|
db_accountdb_batchCommitTime |
histogram |
normal |
写入accountdb的返回时间 |
|
db_statedb_batchCommitTime |
histogram |
normal |
写入statedb的返回时间 |
|
db_metadb_batchCommitTime |
histogram |
normal |
写入metadb的返回时间 |
|
db_chaindb_batchCommitTime |
histogram |
normal |
写入chaindb的返回时间 |
|
db_blockdb_batchCommitTime |
histogram |
normal |
写入blockdb的返回时间 |
|
db_journaldb_batchCommitTime |
histogram |
normal |
写入journaldb的返回时间 |
|
db_receiptdb_batchCommitTime |
histogram |
normal |
写入receiptdb的返回时间 |
|
db_indexdb_batchCommitTime |
histogram |
normal |
写入indexdb的返回时间 |
|
db_dbtype_multicache_memSize |
gauge |
normal |
多级缓存内存占用大小 |
|
db_dbtype_multicache_persist_time |
histogram |
normal |
多级缓存持久化一个区块数据至底层数据库所需时间 |
|
db_dbtype_multicache_walPersist_time |
histogram |
normal |
多级缓存写一个seqNo对应的wal的耗时 |
|
db_dbtype_multicache_cache_get |
gauge |
normal |
multicache尝试从自身的读缓存中读取数据的次数 |
|
db_dbtype_multicache_cache_set |
gauge |
normal |
multicache向自身的读缓存中插入数据的次数 |
|
db_dbtype_multicache_cache_hit |
gauge |
normal |
multicache缓存命中的次数 |
|
db_dbtype_leveldb_compaction_occurrence |
gauge |
normal |
底层leveldb compaction的次数 |
|
db_dbtype_leveldb_size |
gauge |
normal |
底层leveldb的数据量大小 |
|
db_dbtype_filelog_fdNumber |
gauge |
normal |
filelog中处于open状态的句柄数 |
|
db_dbtype_filelog_readTime |
histogram |
expensive |
filelog读取一个元素的耗时 |
|
db_dbtype_filelog_fsyncTime |
histogram |
normal |
filelog在一个log文件写完后,做一次fsync的耗时 |
执行相关指标
名称 |
类型 |
级别 |
描述 |
备注 |
|---|---|---|---|---|
bloomFilter_memSize |
gauge |
normal |
布隆过滤器占用的内存大小 |
|
bloomFilter_lookCounter |
counter |
normal |
布隆过滤器查询次数 |
有「source」标签说明调用查询的模块,分为“namespace表示共识去重”、“executor表示执行层去重”、“API表示接口层去重” |
bloomFilter_lookExistCounter |
counter |
normal |
布隆过滤器中,查询到存在的交易数量,即会穿透布隆过滤器进行db查询的次数 |
有「source」标签说明调用查询的模块,分为“namespace表示共识去重”、“executor表示执行层去重”、“API表示接口层去重” |
execMgr_validate_bloom_readValidDBTime |
histogram |
normal |
布隆过滤器发现交易可能重复后,查询合法交易的时间 |
|
execMgr_validate_bloom_readInvalidDBTime |
histogram |
normal |
布隆过滤器发现交易可能重复后,查询非法交易的时间(会先查询合法交易,再查询非法交易,查询次数可能比合法交易少一些) |
|
execMgr_validate_tx_time |
histogram |
expensive |
单笔交易执行时间 |
|
execMgr_total_blocks |
gauge |
normal |
当前链高度 |
|
execMgr_total_txs |
gauge |
normal |
区块链所有交易总量 |
|
execMgr_online_txs |
gauge |
normal |
区块链归档点后所有交易总量 |
|
execMgr_commit_txs |
counter |
normal |
此次启动后新增的交易数量 |
|
execMgr_commit_time |
histogram |
normal |
写块时间,包括区块组成、写入等等 |
|
execMgr_commit_writeDB_time |
histogram |
normal |
区块batch写入数据库的时间 |
网络相关指标
P2P
名称 |
类型 |
级别 |
描述 |
备注 |
|---|---|---|---|---|
grpc_stream_request_send_total |
counter |
normal |
grpc发送的流请求数目 |
|
grpc_stream_request_received_total |
counter |
normal |
grpc收到的流请求数目 |
|
grpc_stream_request_completed_total |
counter |
normal |
grpc完成的流请求的数目 |
|
grpc_stream_message_send_total |
counter |
normal |
grpc发送的流消息的数目 |
|
grpc_stream_message_recv_total |
counter |
normal |
grpc收到的流消息的数目 |
|
grpc_conn_opened_total |
counter |
normal |
grpc连接打开数目。打开数目减去关闭数目便是目前活跃的连接数。 |
|
grpc_conn_closed_total |
counter |
normal |
grpc连接关闭数目。打开数目减去关闭数目便是目前活跃的连接数。 |
|
grpc_stream_opened_total |
counter |
normal |
grpc流打开数目。打开数目减去关闭数目便是目前活跃的流数。 |
|
grpc_stream_closed_total |
counter |
normal |
grpc流关闭数目。打开数目减去关闭数目便是目前活跃的流数。 |
|
msg_dropped_count_total |
counter |
normal |
某个节点在某个message channel弃的消息的数目 |
|
grpc_stream_message_send_time_microseconds |
histogram |
expensive |
grpc发送一条消息所需要的时间 |
|
logic_conn_opened_count_total |
counter |
normal |
逻辑连接打开数目。打开数目减去关闭数目便是目前活跃的连接数。 |
|
logic_conn_closed_count_total |
counter |
normal |
逻辑连接关闭数目。打开数目减去关闭数目便是目前活跃的连接数。 |
|
grpc_network_receive_bytes_total |
counter |
normal |
grpc网络接收到的消息大小总量 |
|
grpc_network_send_bytes_total |
counter |
normal |
grpc网络发送的消息大小总量 |
消息分发
名称 |
类型 |
级别 |
描述 |
备注 |
|---|---|---|---|---|
dispatcher_%s_writeMsg_ch_size_usage |
gauge |
normal |
消息分发器发送消息通道对应节点的模块消息数量 |
|
dispatcher_%s_writeMsg_ch_mem_usage |
gauge |
normal |
消息分发器发送消息通道对应节点的模块消息占用内存的大小 |
|
dispatcher_%s_readMsg_ch_size_usage |
gauge |
normal |
消息分发器接收消息通道对应节点的模块消息数量 |
|
dispatcher_%s_readMsg_ch_mem_usage |
gauge |
normal |
消息分发器接收消息通道对应节点的模块消息占用内存的大小 |
API相关指标
名称 |
类型 |
级别 |
描述 |
|---|---|---|---|
jsonrpc_request_received_total |
counter |
normal |
接收的jsonrpc请求个数 |
jsonrpc_new_tx_request_success_total |
counter |
normal |
成功处理的发送交易相关请求的个数 |
jsonrpc_new_tx_request_error_total |
counter |
normal |
发送交易相关请求处理失败,不同失败原因的请求个数 |
jsonrpc_received_request_bytes_total |
counter |
normal |
请求总流量统计单位byte |
jsonrpc_sent_response_bytes_total |
counter |
normal |
响应总流量统计单位byte |
jsonrpc_new_tx_request_consensus_abnormal_error_total |
counter |
normal |
由于共识状态异常原因导致请求失败的个数 |
密码相关指标
名称 |
类型 |
级别 |
描述 |
备注 |
|---|---|---|---|---|
verify_tube_signature_in_total |
counter |
normal |
输入验签管道的总签名数 |
|
verify_tube_signature_out_total |
counter |
normal |
输出验签管道的总签名数 |
|
vt_liner_duration_cycle |
Histogram |
normal |
完成批量验证两段子操作的时间 |
|
vt_logic_duration_cycle |
Histogram |
normal |
验签中每段操作的时间 |
|
vt_hash_duration_cycle |
Histogram |
normal |
完成哈希的时间 |
|
verify_tube_batch_size |
Gauge |
normal |
每批次的签名数量 |
|
crypto_verify_channel_length |
Gauge |
normal |
每个阶段的缓冲池大小 |
Go相关指标
名称 |
类型 |
级别 |
描述 |
备注 |
|---|---|---|---|---|
go_goroutines |
gauge |
normal |
||
go_threads |
gauge |
normal |
||
go_gc_duration_seconds |
summary |
normal |
||
go_info |
gauge |
normal |
||
alloc_bytes |
gauge |
normal |
||
alloc_bytes_total |
counter |
normal |
||
sys_bytes |
gauge |
normal |
||
lookups_total |
counter |
normal |
||
mallocs_total |
counter |
normal |
||
frees_total |
counter |
normal |
||
heap_alloc_bytes |
gauge |
normal |
||
heap_sys_bytes |
gauge |
normal |
||
heap_idle_bytes |
gauge |
normal |
||
heap_inuse_bytes |
gauge |
normal |
||
heap_released_bytes |
gauge |
normal |
||
heap_objects |
gauge |
normal |
||
stack_inuse_bytes |
gauge |
normal |
||
stack_sys_bytes |
gauge |
normal |
||
mspan_inuse_bytes |
gauge |
normal |
||
mspan_sys_bytes |
gauge |
normal |
||
mcache_inuse_bytes |
gauge |
normal |
||
mcache_sys_bytes |
gauge |
normal |
||
buck_hash_sys_bytes |
gauge |
normal |
||
gc_sys_bytes |
gauge |
normal |
||
other_sys_bytes |
gauge |
normal |
||
next_gc_bytes |
gauge |
normal |
||
last_gc_time_seconds |
gauge |
normal |
||
gc_cpu_fraction |
gauge |
normal |